import router from "@/router";
import { defineStore } from "pinia";
import { ref, computed } from "vue";

// 扩展 UserInfo 接口，增加 refreshToken（后端返回时需要）
export interface UserInfo {
  phone: string;
  token: string;
  refreshToken?: string; // 新增：刷新令牌（可选，根据后端是否返回决定）
}

export const useUserStore = defineStore("user", () => {
  // 1. 初始化：从 localStorage 读取，避免 JSON.parse 报错（加空对象兜底）
  const userInfo = ref<UserInfo | null>(JSON.parse(localStorage.getItem("userInfo") || "null"));

  // 2. 快捷获取 Token（供 request 拦截器使用，避免重复判断）
  const getToken = computed(() => userInfo.value?.token || "");
  // 新增：快捷获取 refreshToken（供 Token 刷新逻辑使用）
  const getRefreshToken = computed(() => userInfo.value?.refreshToken || "");
  // 新增：判断是否登录（供请求拦截器「需要授权的接口」判断）
  const isLogin = computed(() => !!userInfo.value?.token);

  // 3. 登录：接收后端返回的 token + refreshToken（替换 mock 逻辑）
  const login = (userData: Omit<UserInfo, "token"> & { token: string; refreshToken?: string }) => {
    // 实际项目中，这里接收后端返回的 { phone, token, refreshToken }
    userInfo.value = userData;
    console.log("userInfo.value", userInfo.value);
    localStorage.setItem("userInfo", JSON.stringify(userInfo.value));
  };

  // 4. 退出登录：保持原逻辑，清除所有用户信息
  const logout = () => {
    userInfo.value = null;
    localStorage.removeItem("userInfo");
    router.push("/");
  };

  // 5. 新增：更新 Token（Token 刷新成功后调用）
  const updateToken = (newToken: string, newRefreshToken?: string) => {
    if (userInfo.value) {
      userInfo.value.token = newToken;
      if (newRefreshToken) userInfo.value.refreshToken = newRefreshToken;
      localStorage.setItem("userInfo", JSON.stringify(userInfo.value));
    }
  };

  return {
    userInfo,
    isLogin, // 对外暴露「是否登录」状态
    getToken, // 对外暴露「获取 Token」的快捷方法
    getRefreshToken, // 对外暴露「获取刷新令牌」的方法
    login,
    logout,
    updateToken, // 对外暴露「更新 Token」的方法
  };
});
